﻿#include <csignal>
#include <thread>
#include <mutex>
#include "AsioIOServicePool.h"
#include "CServer.h"
#include "ConfigMgr.h"
#include <boost/filesystem.hpp>
#include <iostream>

int main()
{
	auto& cfg = ConfigMgr::Inst();
	auto server_name = cfg["SelfServer"]["Name"];

	// 读取线程池配置（需在配置文件中新增 TcpThreads 和 HttpThreads）
	size_t http_threads = atoi(cfg["SelfServer"]["HttpThreads"].c_str());

	try {
		auto pool = AsioIOServicePool::GetInstance();
		pool->Init(http_threads); 

		// 创建独立的信号处理上下文 
		boost::asio::io_context signal_io;
		boost::asio::signal_set signals(signal_io, SIGINT, SIGTERM);
		//信号处理逻辑（需捕获池对象）
		signals.async_wait([&signal_io, pool](auto, auto) {
			signal_io.stop();         // 停止信号处理循环 
			pool->Stop();            // 停止双池（关键修改点2）
			});

		auto http_port_str = cfg["SelfServer"]["HttpPort"];

		// 分离 TCP/HTTP 服务实例 
		CServer http_server(pool->GetIOService(),
			atoi(http_port_str.c_str()));

		// 运行信号处理的IO上下文
		signal_io.run();
	}
	catch (std::exception& e) {
		std::cerr << "Exception: " << e.what() << endl;
	}
	return 0;
}

